package com.zdp.controller;

import com.zdp.common.domain.PagedGridResult;
import com.zdp.common.domain.ResultInfo;
import com.zdp.common.util.ResultInfoUtil;
import com.zdp.pojo.Items;
import com.zdp.pojo.ItemsImg;
import com.zdp.pojo.ItemsParam;
import com.zdp.pojo.ItemsSpec;
import com.zdp.pojo.vo.CommentLevelCountsVO;
import com.zdp.pojo.vo.ItemInfoVO;
import com.zdp.pojo.vo.ShopcartVO;
import com.zdp.service.ItemService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author sesshomaru
 * @date 2021/7/30
 * 商品接口
 */
@RestController
@RequestMapping("items")
public class ItemController extends BaseController{

    @Autowired
    private ItemService itemService;

    /**
     * 查询商品详情
     * @param itemId 商品id
     * @return
     */
    @GetMapping("/info/{itemId}")
    public ResultInfo info(
            @PathVariable String itemId) {

        if (StringUtils.isBlank(itemId)) {
            return ResultInfoUtil.buildSuccess(null);
        }

        Items item = itemService.queryItemById(itemId);
        List<ItemsImg> itemImgList = itemService.queryItemImgList(itemId);
        List<ItemsSpec> itemsSpecList = itemService.queryItemSpecList(itemId);
        ItemsParam itemsParam = itemService.queryItemParam(itemId);

        ItemInfoVO itemInfoVO = new ItemInfoVO();
        // 商品主体信息
        itemInfoVO.setItem(item);
        // 商品图片
        itemInfoVO.setItemImgList(itemImgList);
        // 商品规格
        itemInfoVO.setItemSpecList(itemsSpecList);
        // 商品参数
        itemInfoVO.setItemParams(itemsParam);

        return ResultInfoUtil.buildSuccess(itemInfoVO);
    }

    /**
     * 查询商品评价等级
     * @param itemId 商品id
     * @return
     */
    @GetMapping("/commentLevel")
    public ResultInfo commentLevel(@RequestParam String itemId) {
        if (StringUtils.isBlank(itemId)) {
            return ResultInfoUtil.buildError(null);
        }

        CommentLevelCountsVO countsVO = itemService.queryCommentCounts(itemId);

        return ResultInfoUtil.buildSuccess(countsVO);
    }

    /**
     *查询商品评论
     * @param itemId 商品id
     * @param level 评价等级
     * @param page 查询下一页的第几页
     * @param pageSize 分页的每一页显示的条数
     * @return
     */
    @GetMapping("/comments")
    public ResultInfo comments(@RequestParam String itemId,
                               @RequestParam Integer level,
                               @RequestParam Integer page,
                               @RequestParam Integer pageSize) {

        if (StringUtils.isBlank(itemId)) {
            return ResultInfoUtil.buildError(null);
        }

        if (page == null) {
            page = 1;
        }

        if (pageSize == null) {
            pageSize = COMMON_PAGE_SIZE;
        }
        return ResultInfoUtil.buildSuccess(itemService.queryPagedComments(itemId, level, page, pageSize));
    }


    /**
     * 搜索商品列表
     * @param keywords 关键字
     * @param sort 排序
     * @param page 查询下一页的第几页
     * @param pageSize 分页的每一页显示的条数
     * @return
     */
    @GetMapping("/search")
    public ResultInfo search(
            @RequestParam String keywords,
            @RequestParam String sort,
            @RequestParam Integer page,
            @RequestParam Integer pageSize) {

        if (StringUtils.isBlank(keywords)) {
            return ResultInfoUtil.buildError(null);
        }

        if (page == null) {
            page = 1;
        }

        if (pageSize == null) {
            pageSize = PAGE_SIZE;
        }

        PagedGridResult grid = itemService.searchItems(keywords,
                sort,
                page,
                pageSize);

        return ResultInfoUtil.buildSuccess(grid);
    }

    /**
     * 通过分类id搜索商品列表
     * @param catId 三级分类id
     * @param sort 排序
     * @param page 查询下一页的第几页
     * @param pageSize 分页的每一页显示的条数
     * @return
     */
    @GetMapping("/catItems")
    public ResultInfo catItems(
            @RequestParam Integer catId,
            @RequestParam String sort,
            @RequestParam Integer page,
            @RequestParam Integer pageSize) {

        if (catId == null) {
            return ResultInfoUtil.buildError(null);
        }

        if (page == null) {
            page = 1;
        }

        if (pageSize == null) {
            pageSize = PAGE_SIZE;
        }

        PagedGridResult grid = itemService.searchItems(catId,
                sort,
                page,
                pageSize);

        return ResultInfoUtil.buildSuccess(grid);
    }

    /**
     * 渲染购物车中所选的商品
     * 用于用户长时间未登录网站，刷新购物车中的数据（主要是商品价格），类似京东淘宝
     * @param itemSpecIds  拼接的规格ids 1001,1003,1005
     * @return
     */
    @GetMapping("/refresh")
    public ResultInfo refresh(@RequestParam String itemSpecIds) {
        if (StringUtils.isBlank(itemSpecIds)) {
            return ResultInfoUtil.buildSuccess(null);
        }
        List<ShopcartVO> list = itemService.queryItemsBySpecIds(itemSpecIds);

        return ResultInfoUtil.buildSuccess(list);
    }
}
